package com.xxg.renrenorder.service;

import com.xxg.renrencommon.domain.result.BaseResult;
import com.xxg.renrencommon.domain.result.PageInfoResult;
import com.xxg.renrenorder.dao.bean.AfterSalesOrderInfo;
import com.xxg.renrenorder.domain.query.AfterSalesOrderListQuery;
import com.xxg.renrenorder.domain.query.VerifyOrderQuery;

import java.util.List;

/**
 * 售后订单接口
 *
 * @author xxg
 * @date 2021/4/16
 */
public interface AfterSalesOrderService {
    /**
     * 申请售后
     *
     * @param afterSalesOrderInfo 售后申请信息
     * @return 结果
     */
    BaseResult<Void> applyAfterSalesOrder(AfterSalesOrderInfo afterSalesOrderInfo);

    /**
     * 撤销售后申请
     *
     * @param id     售后订单ID
     * @param userId 会员ID
     * @return 结果
     */
    BaseResult<Void> cancelAfterSalesOrder(String id, String userId);

    /**
     * 编辑售后订单
     *
     * @param afterSalesOrderInfo 售后订单信息
     * @return 结果
     */
    BaseResult<Void> editAfterSalesOrder(AfterSalesOrderInfo afterSalesOrderInfo);

    /**
     * 根据订单ID查看锁关联的所有售后订单
     *
     * @param id 订单ID
     * @return 结果
     */
    BaseResult<List<AfterSalesOrderInfo>> getAfterOrderByOrderId(String id);

    /**
     * 审核售后申请
     *
     * @param verifyOrderQuery 审核信息
     * @return 结果
     */
    BaseResult<Void> verifyAfterSalesOrder(VerifyOrderQuery verifyOrderQuery);

    /**
     * 分页获取售后订单
     *
     * @param userId   会员ID
     * @param pageNo   页码
     * @param pageSize 页大小
     * @return 售后订单列表
     */
    BaseResult<List<AfterSalesOrderInfo>> getAfterSalesOrders(String userId, Integer pageNo, Integer pageSize);

    /**
     * 查看售后订单详情
     *
     * @param id 订单ID
     * @return 订单详情
     */
    BaseResult<AfterSalesOrderInfo> getAfterSalesOrderById(String id);

    /**
     * 删除用户自己的售后订单
     *
     * @param id     订单ID
     * @param userId 会员ID
     * @return 结果
     */
    BaseResult<Void> removeAfterSalesOrderById(String id, String userId);

    /**
     * 后台接口分页获取所有售后订单
     *
     * @param afterSalesOrderListQuery
     * @return BaseResult<PageInfoResult < AfterSalesOrderInfo>>
     */
    BaseResult<PageInfoResult<AfterSalesOrderInfo>> getAllAfterSalesOrdersByStatus(AfterSalesOrderListQuery afterSalesOrderListQuery);
}
